package io.sloeber.ui.monitor.views; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import io.sloeber.core.api.SerialManager; import io.sloeber.ui.helpers.MyPreferences; public class OpenSerialDialogBox extends Dialog { private ComboViewer serialPorts; private ComboViewer baudRates; private Button dtrCheckbox; private String selectedPort; private int selectedRate; private boolean selectedDtr; protected OpenSerialDialogBox(Shell parentShell) { super(parentShell); } @Override protected void okPressed() { // I need to save these values in local variables as the GUI stuff is // deleted after he close this.selectedRate = Integer.parseInt(this.baudRates.getCombo().getText()); this.selectedPort = this.serialPorts.getCombo().getText(); this.selectedDtr = this.dtrCheckbox.getSelection(); MyPreferences.setLastUsedBaudRate(this.baudRates.getCombo().getText()); MyPreferences.setLastUsedPort(this.selectedPort); super.okPressed(); } @Override protected Control createDialogArea(Composite parent) { GridLayout layout = new GridLayout(); layout.numColumns = 2; parent.setLayout(layout); // The text fields will grow with the size of the dialog GridData gridData = new GridData(); gridData.grabExcessHorizontalSpace = true; gridData.horizontalAlignment = GridData.FILL; // Create the serial port combo box to allow to select a serial port Label label1 = new Label(parent, SWT.NONE); label1.setText(Messages.openSerialDialogBoxSerialPortToConnectTo); // If there are no comports allow to provide one String[] comPorts = SerialManager.listComPorts(); if (comPorts.length == 0) { this.serialPorts = new ComboViewer(parent, SWT.DROP_DOWN); } else { this.serialPorts = new ComboViewer(parent, SWT.READ_ONLY | SWT.DROP_DOWN); } this.serialPorts.getControl().setLayoutData(new GridData(SWT.LEFT, SWT.NONE, false, false)); this.serialPorts.setContentProvider(new ArrayContentProvider()); this.serialPorts.setLabelProvider(new LabelProvider()); this.serialPorts.setInput(comPorts); // Create baud rate selection combo box to select the baud rate Label label2 = new Label(parent, SWT.NONE); label2.setText(Messages.openSerialDialogBoxSelectTheBautRate); this.baudRates = new ComboViewer(parent, SWT.READ_ONLY | SWT.DROP_DOWN); this.baudRates.getControl().setLayoutData(new GridData(SWT.LEFT, SWT.NONE, false, false)); this.baudRates.setContentProvider(new ArrayContentProvider()); this.baudRates.setLabelProvider(new LabelProvider()); this.baudRates.setInput(SerialManager.listBaudRates()); this.baudRates.getCombo().setText(MyPreferences.getLastUsedRate()); this.serialPorts.getCombo().setText(MyPreferences.getLastUsedPort()); this.dtrCheckbox = new Button(parent, SWT.CHECK); this.dtrCheckbox.setText(Messages.openSerialDialogBoxDtr); this.dtrCheckbox.setSelection(true); return parent; } public String GetComPort() { return this.selectedPort; } public int GetBaudRate() { return this.selectedRate; } public boolean GetDtr() { return this.selectedDtr; } }